/**
 * 防抖函数，用于限制函数的执行频率
 * @param fn 需要进行防抖处理的函数
 * @param delay 延迟时间，单位为毫秒
 * @returns 返回一个经过防抖处理的函数
 */
export function debounce(fn: Function, delay: number) {
  let timer: NodeJS.Timeout;
  return function (...args: any[]) {
    // 如果已有定时器，则清除之前的定时器，重新计时
    if (timer) clearTimeout(timer);
    timer = setTimeout(
      () => {
        fn.apply(null, args);
        clearTimeout(timer);
      },
      delay > 0 ? delay : 100
    );
  };
}
